package config

import (
	"encoding/json"
	"log"
	"os"
)

type config struct {
	DB     `json:"db"`
	Redis  `json:"redis"`
	App    `json:"app"`
	Zaplog ZapLogConf
}

type DB struct {
	Host     string `json:"host"`
	Username string `json:"username"`
	Password string `json:"password"`
	Database string `json:"database"`
	Port     string `json:"port"`
	Charset  string `json:"charset"`
}

type Redis struct {
	Addr     string `json:"addr"`
	Username string `json:"username"`
	Password string `json:"password"`
	Db       int    `json:"db"`
}

type App struct {

}

type ZapLogConf struct {
	Director string ` json:"director"  yaml:"director"`
}

var c *config // config本身是符合类型，而下面在decoder.Decode需要的是指针类型，所以要加*

func InitConfig(path string) {
	file, _ := os.Open(path)
	defer file.Close()

	decoder := json.NewDecoder(file)
	err := decoder.Decode(&c)
	if err != nil {
		log.Fatal(err)
		return
	}
}

func Instance() *config {
	if c == nil {
		InitConfig("./config.json")
	}
	return c
}
